<?php

namespace App\Http\Controllers\Reception\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\DB;

//用户权限验证模块
class VerifyController extends Controller
{
    //微信小程序获取token
    public function getWxToken(Request $request)
    {
        // $appid = "wxd4d7951f0b2120b8";
        // $appsecret = "77138d79b3f8e3f0e6d25f9554364a4e";
        $setting_map['setting_id'] = 1;
        $info = DB::table('setting')->where($setting_map)->first();
        $info->value = json_decode($info->value, true);
        $appid = $info->value[0]['value'];
        $appsecret = $info->value[1]['value'];
        $code = $request->query('code');
        if (!$code) {
            $data = fail();
            $data['msg'] = "参数错误";
            return $data;
        }
        // 拿code换openid
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $appid . "&secret=" . $appsecret . "&js_code=" . $code . "&grant_type=authorization_code";
        $res = request_get($url);
        $res = json_decode($res, true);
        //查询用户是否存在
        $map['wx_open_id'] = $res['openid'];
        $user_msg = DB::table('user')->where($map)->first();
        if ($user_msg) {
            $user_id = $user_msg->user_id;
            $islogin = true;
        } else {
            $user_data['wx_open_id'] = $res['openid'];
            $user_data['nickName'] ="";
            $user_data['avatarUrl'] ="";
            $user_data['balance'] = 0;
            $user_data['integral'] = 0;
            $user_data['monetary'] = 0;
            $user_data['gender'] = 0;
            $user_data['country'] ="";
            $user_data['province'] = "";
            $user_data['city'] = "";
            $user_data['address_id'] = 0;
            $user_data['create_time'] = time();
            $user_data['update_time'] = time();
            $user_data['merchant_id'] = 1;
            // $map['create_time'] =  time();
            $user_id = DB::table('user')->insertGetId($user_data);
            $islogin = false;
        }

         //生产token
         $ori_str = Cache::get($user_id . $appid . '_' . $appsecret);
         $data = success();
         if (!$ori_str) {
             $token = sha1($user_id . $appid . '_' . $appsecret);
             Cache::put($token, $user_id, 7200);
             //设置session_key
             Cache::put('session_key'.$token,$res['session_key']);
             $data['token'] = $token;
         } else {
             // return $ori_str;
             $data['token'] = $ori_str;
         }
         $data['islogin']=$islogin;
         return $data;
    }













    // public function token(Request $request)
    // {
    //     $token = $request->query('token');
    //     //验证权限
    //     $verifytoken = verifytokens($token);
    //     if (isset($verifytoken)) {
    //         return $verifytoken;
    //     }
    // }
    // //生成密钥
    // public function getpubKey(Request $request)
    // {
    //     //记录未登录用户请求ip
    //     $REMOTE_ADDR = get_real_ip(); 
    //     //错误次数记录（缓存）

    //     $cacheaid = Cache::get($REMOTE_ADDR);
    //     if ($cacheaid) {
    //         if ($cacheaid < 500) {
    //             $cacheaid = ((int) $cacheaid) + 1;
    //             Cache::put($REMOTE_ADDR, $cacheaid, 300);
    //         } else {
    //             $data = fail();
    //             $data['msg'] = '请求次数已达上限，请5分钟后重试';
    //             return $data;
    //         }
    //     } else {
    //         $cacheaid = 1;
    //         Cache::put($REMOTE_ADDR, $cacheaid, 300);
    //         // $data = fail();
    //         // $data['msg'] = '请求错误';
    //         // return $data;
    //     }
    //     $config = array(
    //         "digest_alg" => "sha512",
    //         "private_key_bits" => 2048,
    //         "private_key_type" => OPENSSL_KEYTYPE_RSA,
    //         // 'config' => $opensslConfigPath
    //     );
    //     //创建密钥对
    //     $res = openssl_pkey_new($config);
    //     //生成私钥
    //     openssl_pkey_export($res, $privkey);
    //     //生成公钥
    //     $pubKey = openssl_pkey_get_details($res)['key'];
    //     $pubKey = str_replace("-----BEGIN PUBLIC KEY-----", "", $pubKey);
    //     $pubKey = str_replace("-----END PUBLIC KEY-----", "", $pubKey);
    //     $pubKey = str_replace("\n", "", $pubKey);
    //     $data = success();
    //     // $data['privkey'] = $privkey;
    //     $data['uniqid'] = uniqid().'r';
    //     $data['pubKey'] = $pubKey;
    //     Cache::put($data['uniqid'], $privkey, 7200);
    //     return $data;
    // }
    // //生产唯一ID
    // public function createUniqueId()
    // {
    //     $data = uniqid();
    //     return $data;
    // }
    // //生成临时凭证
    // public function createTmpToken(Request $request)
    // {
    //     $uniqid = $request->query('uniqid');
    //     $publicData=$request->query('publicData');
    //     $private_key = Cache::get($uniqid);

    //     //传输的加密密码解密
    //     openssl_private_decrypt(base64_decode($publicData), $decrypted, $private_key);
    //     $publicData = $decrypted;

    //     //清除密钥
    //     Cache::put($uniqid, $private_key, 0);

    //     //生产token
    //     $appsecret = 'ucdjtkSViW97Mbxf';
    //     $appid = $uniqid . 'Tmp';
    //     $ori_str = Cache::get($appid . '_' . $appsecret);
    //     $data = success();
    //     if (!$ori_str) {
    //         //重新获取就把以前的token删除
    //         Cache::forget($ori_str);
    //         //这里是token产生的机制
    //         $nonce = $this->createNoncestr(32);
    //         $tmpArr = array($nonce, $appid, $appsecret);
    //         sort($tmpArr, SORT_STRING);
    //         $tmpStr = implode($tmpArr);
    //         $tmpStr = sha1($tmpStr);
    //         // Cache::put($appid . '_' . $appsecret, $tmpStr, 7200);
    //         Cache::put($tmpStr, $appid . '_' . $appsecret, 7200);
    //         $data['token'] = $tmpStr;
    //         //这里做了缓存 'a'=>b 和'b'=>a格式的缓存
    //     } else {
    //         $data['token'] = $ori_str;
    //     }
    //     return $data;
    // }
    // //生产凭证
    // public function getToken(Request $request)
    // {
    //     $uniqid = $request->query('uniqid');
    //     $publicData=$request->query('publicData');
    //     $private_key = Cache::get($uniqid);
    //     //传输的加密密码解密
    //     openssl_private_decrypt(base64_decode($publicData), $decrypted, $private_key);
    //     $publicData = $decrypted;
    //     $user_id =$publicData;
    //     //清除密钥
    //     Cache::put($uniqid, $private_key, 0);
    //     $appsecret = 'VXyZ50Dc$^jNvIFt';
    //     //生产token
    //     $appid = $user_id . 'reception';
    //     Cache::put($appid, $user_id);
    //     $ori_str = Cache::get($appid . '_' . $appsecret);
    //     $data = success();
    //     if (!$ori_str) {
    //         //重新获取就把以前的token删除
    //         Cache::forget($ori_str);
    //         //这里是token产生的机制
    //         $nonce = $this->createNoncestr(32);
    //         $tmpArr = array($nonce, $appid, $appsecret);
    //         sort($tmpArr, SORT_STRING);
    //         $tmpStr = implode($tmpArr);
    //         $tmpStr = sha1($tmpStr);
    //         Cache::put($appid . '_' . $appsecret, $tmpStr, 7200);
    //         Cache::put($tmpStr, $appid . '_' . $appsecret, 7200);
    //         // return $tmpStr;
    //         $data['token'] = $tmpStr;

    //         //这里做了缓存 'a'=>b 和'b'=>a格式的缓存
    //     } else {
    //         // return $ori_str;
    //         $data['token'] = $ori_str;
    //     }
    //     return $data;

    // }
    // /**
    //  *  作用：产生随机字符串，不长于32位
    //  */
    // function createNoncestr($length = 32)
    // {
    //     $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
    //     $str = "";
    //     for ($i = 0; $i < $length; $i++) {
    //         $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    //     }
    //     return $str;
    // }

}
